import axios from 'axios'
import qs from 'qs'
import { ElMessage } from 'element-plus'
var baseURL = 'http://121.36.10.13:50000'

var timeout = 16000
axios.defaults.baseURL = baseURL
// 请求超时时间
axios.defaults.timeout = timeout

// 请求拦截器
// axios.interceptors.request.use(
//   config => {
//     // 自定义请求头参数
//     // config.headers['x-tif-uid'] = 1
//     const token = sessionStorage.getItem('token') || ''
//     const areaId = JSON.parse(sessionStorage.getItem('areaId')) || ''
//     config.headers.Authorization = token ? JSON.parse(token) : 'basic enlzb2Z0Onp5c29mdCo2MDc5'
//     config.headers['u-login-areaId'] = areaId
//     config.headers['x-tif-uid'] = '7sgkw7l5ui1hck4ze2vvtt'
//     if (config.method === 'post') {
//       if (Object.prototype.toString.call(config.data) != '[object FormData]') { // eslint-disable-line
//         if (config.headers['Content-Type'] !== 'application/json;charset=UTF-8') {
//           config.data = Qs.stringify(config.data)
//         }
//       }
//     }
//     return config
//   }, error => {
//     // 对请求错误做些什么
//     return Promise.reject(error)
//   }
// )

// 响应拦截器
axios.interceptors.response.use(
  response => {
    // 如果返回的状态码为200，说明接口请求成功，可以正常拿到数据
    if (response.status === 200) {
      return Promise.resolve(response)
    } else {
      return Promise.reject(response.statusText)
    }
  }, error => {
    if (error.message.includes('timeout')) {
      return Promise.reject('请求超时，请稍后重试！')
    }
    return Promise.reject(error.toString())
  }
)


class Abstract {

  // 自定义header头
  headers = {
    ContentType: 'application/json;charset=UTF-8'
  }

  apiAxios ({ url, params = {}, method, headers = this.headers }) {

    const config = {
      url: url,
      params: params,
      method: method,
      headers: headers
    }

    return new Promise((resolve, reject) => {
      axios(config).then((res) => {
        // 200:服务端业务处理正常结束
        if (res.data.errcode === 200) {
          resolve(res.data);
        } else {
          ElMessage.error(res.data.errmsg)
          reject(res.data);
        }
      }).catch((err) => {
        ElMessage.error(err.toString())
        reject(err.toString());
      });
    });
  }

  /**
  * GET类型的网络请求
  */
  getReq ({ url, params }) {
    return this.apiAxios({ url: url + qs.stringify(params), method: 'get' });
  }

  /**
  * POST类型的网络请求
  */
  postReq ({ url, params }) {
    return this.apiAxios({ url, params, method: 'post' });
  }
}

export default Abstract
